import { stdout } from 'single-line-log';

/**
 * 进度条
 * @param {*} description 描述
 * @param {*} bar_length 进度长度
 */
function ProgressBar(description, bar_length) {
  // 两个基本参数(属性)
  this.description = description || '进度'; // 命令行开头的文字信息
  this.length = bar_length || 30; // 进度条的长度(单位：字符)，默认设为 25

  // 刷新进度条图案、文字的方法
  this.render = function (opts) {
    let percent = (opts.completed / opts.total).toFixed(4); // 计算进度(子任务的 完成数 除以 总数)
    let cell_num = Math.floor(percent * this.length); // 计算需要多少个 █ 符号来拼凑图案

    // 拼接黑色条
    let cell = '';
    for (let i = 0; i < cell_num; i++) {
      cell += '█';
    }

    // 拼接灰色条
    let empty = '';
    for (let i = 0; i < this.length - cell_num; i++) {
      empty += '░';
    }

    // 拼接最终文本
    let cmdText = opts.description || this.description + ': ' + (100 * percent).toFixed(2) + '% ' + cell + empty + ' ' + opts.completed + '/' + opts.total;
    // 在单行输出文本
    stdout(cmdText);
  };
}

export default ProgressBar;
